#include "BloqueTextoEntrada.h"
#include <string>
#include <fstream>
#include <iostream>
using namespace std;

BloqueTextoEntrada::BloqueTextoEntrada(string nombrearchivo)
{
	sizeRealDelBuffer= getSizeMaximoDelBuffer();

	cout << "sizeRealDelBuffer "<< sizeRealDelBuffer <<endl;

	archivo=new ifstream(nombrearchivo.c_str(),ios::binary|ios::in);


	//////////////////////////
	if (archivo->good()) cout << "archivo->good()"<< endl;
	contador = 0;

	///////////////
	bloque=new char[sizeRealDelBuffer];
	archivo->read(bloque,sizeRealDelBuffer);
	finArch = false;
	finBloq = false;
	cantCaracteresValidos=archivo->gcount();


	sizeActual = cantCaracteresValidos;/////////


	cout << "cantCaracteresValidos "<< cantCaracteresValidos<<endl;
//system("pause");
	if(cantCaracteresValidos<sizeRealDelBuffer)
	{
		cout << "_leyomenos "<< endl;

		_leyomenos=true;
		//cantCaracteresValidos++;
	}
	else
		_leyomenos=false;

}

void BloqueTextoEntrada::llenarBloque()
{
	this->finArch=false;
	this->finBloq=false;
	archivo->read(bloque,sizeRealDelBuffer);
	cantCaracteresValidos = archivo->gcount();


	/////////////////////AQUI SE PRODUCE UN ERROR QUE TODAVIA NO PUEDO EXPLICAR//////////////////
	/*
	 * AL TRATAR DE COMPRIMIR CIERTOS ARCHIVOS OCURRE QUE SI COMENTO LAS 2 LINEAS siguientes, comprime lo mas bien.
	 * Sino, se cuelga...
	 * Son tan solo un contador y un cout para saber cuantos bytes se han leido...
	 *
	 * contador++;
	 * cout << "bytesLeidos "<< contador*sizeActual<<endl;
	 *
	 * DE TODAS FORMAS, HAY OTROS ARCHIVOS EN LOS CUALES COMENTAR ESAS LINEAS NO ES SUFICIENTE E IGUAL
	 * SE CUELGA O TERMINA ABRUPTAMENTE. Y REALMENTE NO ENCUENTRO DONDE...
	 * PORQUE EN LA CONSOLA SE VE "algo" PERO NO SE VE "FIN LLENAR BLOQUE"
	 *
	 *
	 * */

	//cout << "ALGO" << endl;

	//cout << "archivo->gcount() " << cantCaracteresValidos << endl;


	//contador++;
	//cout << "bytesLeidos "<< contador*sizeActual<<endl;

	sizeActual = cantCaracteresValidos;


	if(cantCaracteresValidos==0) finArch=true;


	if(cantCaracteresValidos<sizeRealDelBuffer)
	{
		_leyomenos=true;
			//cantCaracteresValidos++;
		cout << "cantCaracteresValidos "<< cantCaracteresValidos<<endl;

	}
	else
		_leyomenos=false;

	cout << "FIN LLENAR BLOQUE" << endl;

}

char BloqueTextoEntrada::operator[](int n)
{
	return bloque[n];
}

BloqueTextoEntrada::~BloqueTextoEntrada()
{
	//cout << "destructor BLoqueTexto"<< endl;
	/*if(archivo!=0)
	{
		archivo->close();
		delete archivo;
		archivo=0;
	}
	delete[] bloque;
	bloque=0;*/
}
